babl: refactor format registration to loop over types
authorØyvind Kolås <pippin@gimp.org>
Wed, 20 Jun 2018 19:04:46 +0000 (21:04 +0200)
committerØyvind Kolås <pippin@gimp.org>
Wed, 20 Jun 2018 19:08:01 +0000 (21:08 +0200)
Also register full set of R~G~B~ and Y~ formats for all the types.

babl/base/formats.c

index 7affcc56158d613a036b4979b81d9352b8730fb1..959c472203335bbe30836da12ad4f5836402884f 100644 (file)
 void
 babl_formats_init (void)
 {
-  babl_format_new (
-    babl_model_from_id (BABL_RGBA_NONLINEAR),
+  const Babl *types[]={
     babl_type_from_id (BABL_DOUBLE),
-    babl_component_from_id (BABL_RED_NONLINEAR),
-    babl_component_from_id (BABL_GREEN_NONLINEAR),
-    babl_component_from_id (BABL_BLUE_NONLINEAR),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_RGBA_NONLINEAR),
     babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_RED_NONLINEAR),
-    babl_component_from_id (BABL_GREEN_NONLINEAR),
-    babl_component_from_id (BABL_BLUE_NONLINEAR),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_RGBA_NONLINEAR),
-    babl_type_from_id (BABL_U16),
-    babl_component_from_id (BABL_RED_NONLINEAR),
-    babl_component_from_id (BABL_GREEN_NONLINEAR),
-    babl_component_from_id (BABL_BLUE_NONLINEAR),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_RGBA_NONLINEAR),
+    babl_type_from_id (BABL_HALF),
     babl_type_from_id (BABL_U8),
-    babl_component_from_id (BABL_RED_NONLINEAR),
-    babl_component_from_id (BABL_GREEN_NONLINEAR),
-    babl_component_from_id (BABL_BLUE_NONLINEAR),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_RGBA_NONLINEAR_PREMULTIPLIED),
-    babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_RED_NONLINEAR_MUL_ALPHA),
-    babl_component_from_id (BABL_GREEN_NONLINEAR_MUL_ALPHA),
-    babl_component_from_id (BABL_BLUE_NONLINEAR_MUL_ALPHA),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_RGBA_NONLINEAR_PREMULTIPLIED),
     babl_type_from_id (BABL_U16),
-    babl_component_from_id (BABL_RED_NONLINEAR_MUL_ALPHA),
-    babl_component_from_id (BABL_GREEN_NONLINEAR_MUL_ALPHA),
-    babl_component_from_id (BABL_BLUE_NONLINEAR_MUL_ALPHA),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_RGBA_NONLINEAR_PREMULTIPLIED),
-    babl_type_from_id (BABL_U8),
-    babl_component_from_id (BABL_RED_NONLINEAR_MUL_ALPHA),
-    babl_component_from_id (BABL_GREEN_NONLINEAR_MUL_ALPHA),
-    babl_component_from_id (BABL_BLUE_NONLINEAR_MUL_ALPHA),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_RGB_NONLINEAR),
-    babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_RED_NONLINEAR),
-    babl_component_from_id (BABL_GREEN_NONLINEAR),
-    babl_component_from_id (BABL_BLUE_NONLINEAR),
-    NULL);
+    babl_type_from_id (BABL_U32)
+  };
+  for (int i = 0; i < sizeof (types)/sizeof(types[0]);i++)
+  {
+    const Babl *type = types[i];
+
+    babl_format_new (
+      babl_model_from_id (BABL_RGBA_NONLINEAR_PREMULTIPLIED),
+      type,
+      babl_component_from_id (BABL_RED_NONLINEAR_MUL_ALPHA),
+      babl_component_from_id (BABL_GREEN_NONLINEAR_MUL_ALPHA),
+      babl_component_from_id (BABL_BLUE_NONLINEAR_MUL_ALPHA),
+      babl_component_from_id (BABL_ALPHA),
+      NULL);
+
+    babl_format_new (
+      babl_model_from_id (BABL_RGBA_PERCEPTUAL_PREMULTIPLIED),
+      type,
+      babl_component_from_id (BABL_RED_PERCEPTUAL_MUL_ALPHA),
+      babl_component_from_id (BABL_GREEN_PERCEPTUAL_MUL_ALPHA),
+      babl_component_from_id (BABL_BLUE_PERCEPTUAL_MUL_ALPHA),
+      babl_component_from_id (BABL_ALPHA),
+      NULL);
+
+    babl_format_new (
+      babl_model_from_id (BABL_RGBA_NONLINEAR),
+      type,
+      babl_component_from_id (BABL_RED_NONLINEAR),
+      babl_component_from_id (BABL_GREEN_NONLINEAR),
+      babl_component_from_id (BABL_BLUE_NONLINEAR),
+      babl_component_from_id (BABL_ALPHA),
+      NULL);
+
+    babl_format_new (
+      babl_model_from_id (BABL_RGBA_PERCEPTUAL),
+      type,
+      babl_component_from_id (BABL_RED_PERCEPTUAL),
+      babl_component_from_id (BABL_GREEN_PERCEPTUAL),
+      babl_component_from_id (BABL_BLUE_PERCEPTUAL),
+      babl_component_from_id (BABL_ALPHA),
+      NULL);
+
   babl_format_new (
     babl_model_from_id (BABL_RGB_NONLINEAR),
-    babl_type_from_id (BABL_U16),
+    type,
     babl_component_from_id (BABL_RED_NONLINEAR),
     babl_component_from_id (BABL_GREEN_NONLINEAR),
     babl_component_from_id (BABL_BLUE_NONLINEAR),
     NULL);
   babl_format_new (
     babl_model_from_id (BABL_RGB_NONLINEAR),
-    babl_type_from_id (BABL_U8),
+    type,
     babl_component_from_id (BABL_RED_NONLINEAR),
     babl_component_from_id (BABL_GREEN_NONLINEAR),
     babl_component_from_id (BABL_BLUE_NONLINEAR),
     NULL);
+
   babl_format_new (
-    babl_model_from_id (BABL_MODEL_GRAY_NONLINEAR_ALPHA),
-    babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_GRAY_NONLINEAR),
-    babl_component_from_id (BABL_ALPHA),
+    babl_model_from_id (BABL_RGB_PERCEPTUAL),
+    type,
+    babl_component_from_id (BABL_RED_PERCEPTUAL),
+    babl_component_from_id (BABL_GREEN_PERCEPTUAL),
+    babl_component_from_id (BABL_BLUE_PERCEPTUAL),
     NULL);
   babl_format_new (
-    babl_model_from_id (BABL_MODEL_GRAY_NONLINEAR_ALPHA_PREMULTIPLIED),
-    babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_GRAY_NONLINEAR_MUL_ALPHA),
-    babl_component_from_id (BABL_ALPHA),
+    babl_model_from_id (BABL_RGB_PERCEPTUAL),
+    type,
+    babl_component_from_id (BABL_RED_PERCEPTUAL),
+    babl_component_from_id (BABL_GREEN_PERCEPTUAL),
+    babl_component_from_id (BABL_BLUE_PERCEPTUAL),
     NULL);
+
   babl_format_new (
     babl_model_from_id (BABL_MODEL_GRAY_NONLINEAR),
-    babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_GRAY_NONLINEAR),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_MODEL_GRAY_NONLINEAR_ALPHA),
-    babl_type_from_id (BABL_U16),
+    type,
     babl_component_from_id (BABL_GRAY_NONLINEAR),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_MODEL_GRAY_NONLINEAR_ALPHA_PREMULTIPLIED),
-    babl_type_from_id (BABL_U16),
-    babl_component_from_id (BABL_GRAY_NONLINEAR_MUL_ALPHA),
-    babl_component_from_id (BABL_ALPHA),
     NULL);
+
   babl_format_new (
-    babl_model_from_id (BABL_MODEL_GRAY_NONLINEAR),
-    babl_type_from_id (BABL_U16),
-    babl_component_from_id (BABL_GRAY_NONLINEAR),
+    babl_model_from_id (BABL_MODEL_GRAY_PERCEPTUAL),
+    type,
+    babl_component_from_id (BABL_GRAY_PERCEPTUAL),
     NULL);
+
   babl_format_new (
     babl_model_from_id (BABL_MODEL_GRAY_NONLINEAR_ALPHA),
-    babl_type_from_id (BABL_U8),
+    type,
     babl_component_from_id (BABL_GRAY_NONLINEAR),
     babl_component_from_id (BABL_ALPHA),
     NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_MODEL_GRAY_NONLINEAR_ALPHA_PREMULTIPLIED),
-    babl_type_from_id (BABL_U8),
-    babl_component_from_id (BABL_GRAY_NONLINEAR_MUL_ALPHA),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_MODEL_GRAY_NONLINEAR),
-    babl_type_from_id (BABL_U8),
-    babl_component_from_id (BABL_GRAY_NONLINEAR),
-    NULL);
 
-  /* overriding name, since the generated name would be wrong due
-   * to differing types
-   */
-  babl_format_new (
-    "name", "Y'CbCr u8",
-    "planar",
-    babl_model_from_id (BABL_YCBCR),
-    babl_type_from_id (BABL_U8_LUMA),
-    babl_sampling (1, 1),
-    babl_component_from_id (BABL_GRAY_NONLINEAR),
-    babl_type_from_id (BABL_U8_CHROMA),
-    babl_sampling (2, 2),
-    babl_component_from_id (BABL_CB),
-    babl_sampling (2, 2),
-    babl_component_from_id (BABL_CR),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_YCBCR),
-    babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_GRAY_NONLINEAR),
-    babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_CB),
-    babl_component_from_id (BABL_CR),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_YCBCR_ALPHA),
-    babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_GRAY_NONLINEAR),
-    babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_CB),
-    babl_component_from_id (BABL_CR),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
   babl_format_new (
-    babl_model_from_id (BABL_RGBA),
-    babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_RED),
-    babl_component_from_id (BABL_GREEN),
-    babl_component_from_id (BABL_BLUE),
+    babl_model_from_id (BABL_MODEL_GRAY_PERCEPTUAL_ALPHA),
+    type,
+    babl_component_from_id (BABL_GRAY_PERCEPTUAL),
     babl_component_from_id (BABL_ALPHA),
     NULL);
+
   babl_format_new (
-    babl_model_from_id (BABL_RGBA),
-    babl_type_from_id (BABL_U16),
-    babl_component_from_id (BABL_RED),
-    babl_component_from_id (BABL_GREEN),
-    babl_component_from_id (BABL_BLUE),
+    babl_model_from_id (BABL_MODEL_GRAY_NONLINEAR_ALPHA_PREMULTIPLIED),
+    type,
+    babl_component_from_id (BABL_GRAY_NONLINEAR_MUL_ALPHA),
     babl_component_from_id (BABL_ALPHA),
     NULL);
+
+
   babl_format_new (
     babl_model_from_id (BABL_RGBA),
-    babl_type_from_id (BABL_DOUBLE),
+    type,
     babl_component_from_id (BABL_RED),
     babl_component_from_id (BABL_GREEN),
     babl_component_from_id (BABL_BLUE),
     babl_component_from_id (BABL_ALPHA),
     NULL);
+
   babl_format_new (
-    babl_model_from_id (BABL_RGBA),
-    babl_type_from_id (BABL_U8),
+    babl_model_from_id (BABL_RGB),
+    type,
     babl_component_from_id (BABL_RED),
     babl_component_from_id (BABL_GREEN),
     babl_component_from_id (BABL_BLUE),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_RGBA_PREMULTIPLIED),
-    babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_RED_MUL_ALPHA),
-    babl_component_from_id (BABL_GREEN_MUL_ALPHA),
-    babl_component_from_id (BABL_BLUE_MUL_ALPHA),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_RGBA_PREMULTIPLIED),
-    babl_type_from_id (BABL_U16),
-    babl_component_from_id (BABL_RED_MUL_ALPHA),
-    babl_component_from_id (BABL_GREEN_MUL_ALPHA),
-    babl_component_from_id (BABL_BLUE_MUL_ALPHA),
-    babl_component_from_id (BABL_ALPHA),
     NULL);
+
   babl_format_new (
     babl_model_from_id (BABL_RGBA_PREMULTIPLIED),
-    babl_type_from_id (BABL_U8),
+    type,
     babl_component_from_id (BABL_RED_MUL_ALPHA),
     babl_component_from_id (BABL_GREEN_MUL_ALPHA),
     babl_component_from_id (BABL_BLUE_MUL_ALPHA),
     babl_component_from_id (BABL_ALPHA),
     NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_RGB),
-    babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_RED),
-    babl_component_from_id (BABL_GREEN),
-    babl_component_from_id (BABL_BLUE),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_RGB),
-    babl_type_from_id (BABL_U16),
-    babl_component_from_id (BABL_RED),
-    babl_component_from_id (BABL_GREEN),
-    babl_component_from_id (BABL_BLUE),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_RGB),
-    babl_type_from_id (BABL_U8),
-    babl_component_from_id (BABL_RED),
-    babl_component_from_id (BABL_GREEN),
-    babl_component_from_id (BABL_BLUE),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_GRAY_ALPHA),
-    babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_GRAY_LINEAR),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_GRAY_ALPHA_PREMULTIPLIED),
-    babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_GRAY_LINEAR_MUL_ALPHA),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_GRAY),
-    babl_type_from_id (BABL_FLOAT),
-    babl_component_from_id (BABL_GRAY_LINEAR),
-    NULL);
+
   babl_format_new (
     babl_model_from_id (BABL_GRAY_ALPHA),
-    babl_type_from_id (BABL_U16),
+    type,
     babl_component_from_id (BABL_GRAY_LINEAR),
     babl_component_from_id (BABL_ALPHA),
     NULL);
   babl_format_new (
     babl_model_from_id (BABL_GRAY_ALPHA_PREMULTIPLIED),
-    babl_type_from_id (BABL_U16),
+    type,
     babl_component_from_id (BABL_GRAY_LINEAR_MUL_ALPHA),
     babl_component_from_id (BABL_ALPHA),
     NULL);
   babl_format_new (
     babl_model_from_id (BABL_GRAY),
-    babl_type_from_id (BABL_U16),
+    type,
     babl_component_from_id (BABL_GRAY_LINEAR),
     NULL);
+
+  }
+
+  /* overriding name, since the generated name would be wrong due
+   * to differing types
+   */
   babl_format_new (
-    babl_model_from_id (BABL_GRAY_ALPHA),
-    babl_type_from_id (BABL_U8),
-    babl_component_from_id (BABL_GRAY_LINEAR),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_GRAY_ALPHA_PREMULTIPLIED),
-    babl_type_from_id (BABL_U8),
-    babl_component_from_id (BABL_GRAY_LINEAR_MUL_ALPHA),
-    babl_component_from_id (BABL_ALPHA),
-    NULL);
-  babl_format_new (
-    babl_model_from_id (BABL_GRAY),
-    babl_type_from_id (BABL_U8),
-    babl_component_from_id (BABL_GRAY_LINEAR),
+    "name", "Y'CbCr u8",
+    "planar",
+    babl_model_from_id (BABL_YCBCR),
+    babl_type_from_id (BABL_U8_LUMA),
+    babl_sampling (1, 1),
+    babl_component_from_id (BABL_GRAY_NONLINEAR),
+    babl_type_from_id (BABL_U8_CHROMA),
+    babl_sampling (2, 2),
+    babl_component_from_id (BABL_CB),
+    babl_sampling (2, 2),
+    babl_component_from_id (BABL_CR),
     NULL);
-
   babl_format_new (
     babl_model_from_id (BABL_YCBCR),
     babl_type_from_id (BABL_FLOAT),